libxc: add xc_machphys_mfn_list to wrap XENMEM_machphys_mfn_list
authorIan Campbell <ian.campbell@citrix.com>
Mon, 18 Oct 2010 16:16:59 +0000 (17:16 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Mon, 18 Oct 2010 16:16:59 +0000 (17:16 +0100)
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/libxc/xc_domain_save.c
tools/libxc/xc_private.c
tools/libxc/xenctrl.h

index 2442cc7958806405edcc7283d0ea7118799e1912..b6e239200bde4ab13b1d77f9ee6eff951f416470 100644 (file)
@@ -623,7 +623,6 @@ xen_pfn_t *xc_map_m2p(xc_interface *xch,
                                  int prot,
                                  unsigned long *mfn0)
 {
-    struct xen_machphys_mfn_list xmml;
     privcmd_mmap_entry_t *entries;
     unsigned long m2p_chunks, m2p_size;
     xen_pfn_t *m2p;
@@ -634,18 +633,14 @@ xen_pfn_t *xc_map_m2p(xc_interface *xch,
     m2p_size   = M2P_SIZE(max_mfn);
     m2p_chunks = M2P_CHUNKS(max_mfn);
 
-    xmml.max_extents = m2p_chunks;
-
     extent_start = calloc(m2p_chunks, sizeof(xen_pfn_t));
     if ( !extent_start )
     {
         ERROR("failed to allocate space for m2p mfns");
         goto err0;
     }
-    set_xen_guest_handle(xmml.extent_start, extent_start);
 
-    if ( xc_memory_op(xch, XENMEM_machphys_mfn_list, &xmml) ||
-         (xmml.nr_extents != m2p_chunks) )
+    if ( xc_machphys_mfn_list(xch, m2p_chunks, extent_start) )
     {
         PERROR("xc_get_m2p_mfns");
         goto err1;
index d32c1d42cbe38d0ce4b161d4824510beacb5dd3d..5c9fb39d0ac42214a9aaba55dd4c6ed6d76b8988 100644 (file)
@@ -549,6 +549,20 @@ long long xc_domain_get_cpu_usage( xc_interface *xch, domid_t domid, int vcpu )
     return domctl.u.getvcpuinfo.cpu_time;
 }
 
+int xc_machphys_mfn_list(xc_interface *xch,
+                        unsigned long max_extents,
+                        xen_pfn_t *extent_start)
+{
+    int rc;
+    struct xen_machphys_mfn_list xmml = {
+        .max_extents = max_extents,
+    };
+    set_xen_guest_handle(xmml.extent_start, extent_start);
+    rc = xc_memory_op(xch, XENMEM_machphys_mfn_list, &xmml);
+    if (rc || xmml.nr_extents != max_extents)
+        return -1;
+    return 0;
+}
 
 #ifndef __ia64__
 int xc_get_pfn_list(xc_interface *xch,
index 4a3223dfdf31fae666607c9f9d1d015a90abbf59..33f01eb382708f550725e3ff30fc4a3ea7a29c73 100644 (file)
@@ -753,6 +753,10 @@ int xc_numainfo(xc_interface *xch, xc_numainfo_t *info);
 int xc_sched_id(xc_interface *xch,
                 int *sched_id);
 
+int xc_machphys_mfn_list(xc_interface *xch,
+                         unsigned long max_extents,
+                         xen_pfn_t *extent_start);
+
 typedef xen_sysctl_cpuinfo_t xc_cpuinfo_t;
 int xc_getcpuinfo(xc_interface *xch, int max_cpus,
                   xc_cpuinfo_t *info, int *nr_cpus);